package com.naiterui.ehp.bs.doctor.dao;

import com.naiterui.common.repository.page.Page;
import com.naiterui.common.repository.page.PageParamVO;
import com.naiterui.ehp.bp.domain.PatientPersonDoctor;
import com.naiterui.ehp.bp.domain.PatientPersonDoctorPK;

import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * 医患关系实体dao
 * @author wangzehao
 */
public interface IPatientPersonDoctorDao {

    PatientPersonDoctor get(PatientPersonDoctorPK doctorPK);

    void update(PatientPersonDoctor doctor);

    /**
     * 根据医生+患者ids获取集合
     * IPatientPersonDoctorDao.getByPatientIds()
     *
     * @param doctorId
     * @param patientId
     *
     * @return
     *
     * @Author mudou
     * @Date 2016年11月17日
     * @since 2.6.5
     */
    List<PatientPersonDoctor> getByPatientIds(Long doctorId, Set<Long> patientId);

    /**
     * 根据医生ID获取患者ID列表
     * IPatientPersonDoctorDao.getPatientIdsByDoctorId()
     * @Author guoyongxiang
     * @Date 2017年4月1日
     * @since 2.7.0
     * @param doctorId
     * @return
     */
    List<Long> getPatientIdsByDoctorId(Long doctorId);

    /**
     * 分页获取一段时间的新患者id
     * @Description
     * @param doctorId 医生ID
     * @param startTime 开始时间
     * @param pageParamVO 分页信息
     * @return
     * @History 2017年6月10日 by wangchuan
     */
    Page<PatientPersonDoctor> getByPeriods(Long doctorId, Date startTime, PageParamVO pageParamVO);
    
    /**
     * 根据患者ID获取私人医生列表ID
     * @param patientId
     * @return
     */
    List<Long> getDoctorIdsByPatientId(Long patientId);

    /**
     * 初始化医生患者总数
     * @param doctorId
     * @return
     */
    Integer getTotalPatientCount(Long doctorId);

    /**
     * 初始化医生今日患者数
     * @param doctorId
     * @param date
     * @return
     */
    Long getTodayPatientCount(Long doctorId,Date date);

    /**
     * 根据医生ID和患者ID集合，批量更新医患关系状态
     *
     * @param docotrId   医生ID
     * @param patientIds 患者ID集合
     *
     * @return
     */
    int updateRelationFlag(Long docotrId, List<Long> patientIds);

    /**
     * 根据医生ID获取时间段内对应的状态记录患者ID
     *
     * @param doctorId     医生ID
     * @param relationFlag 删除状态
     * @return 符合结果的患者ID集合
     */
    List<Long> getPatientIds(Long doctorId, Integer relationFlag);
}
